/**
 * 错误处理中间件
 * @param {Object} ctx - Koa上下文对象
 * @param {Function} next - 下一个中间件函数
 */
const errorMiddleware = async (ctx, next) => {
  try {
    await next();
  } catch (error) {
    // 检查是否已经设置了状态码，如果没有则默认为500
    const statusCode = ctx.status || 500;
    
    // 获取错误信息
    const message = error.message || '服务器内部错误';
    
    // 触发错误事件，让app.js中的错误处理器处理
    ctx.app.emit('error', error, ctx);
    
    // 设置响应状态码和错误信息
    ctx.status = statusCode;
    ctx.body = {
      success: false,
      message: message,
      // 生产环境不返回错误堆栈信息
      ...(process.env.NODE_ENV !== 'production' && {
        stack: error.stack
      })
    };
  }
};

module.exports = errorMiddleware;